// 搜索传入中心点坐标周围的点 
/**
 * 地球半径（公里）
 */
const EARTH_RADIUS = 6371;
 
/**
 * 将角度转换为弧度
 * @param {number} degree - 角度值
 * @returns {number} 弧度值
 */
function toRadians(degree) {
	return degree * Math.PI / 180;
}
 
/**
 * 将弧度转换为角度
 * @param {number} radian - 弧度值
 * @returns {number} 角度值
 */
function toDegrees(radian) {
	return radian * 180 / Math.PI;
}
 
/**
 * 计算给定中心点和距离的边界经纬度
 * @param {number} centerLat - 中心纬度（度）
 * @param {number} centerLon - 中心经度（度）
 * @param {number} distance - 距离（公里）
 * @returns {Object} 包含 minLat, maxLat, minLon, maxLon 的对象
 */
function calculateBounds(centerLat, centerLon, distance) {
	const dLat = (distance / EARTH_RADIUS) * (180 / Math.PI);
	const dLon = (distance / (EARTH_RADIUS * Math.cos(toRadians(centerLat)))) * (180 / Math.PI);
 
	const minLat = centerLat - dLat;
	const maxLat = centerLat + dLat;
	const minLon = centerLon - dLon;
	const maxLon = centerLon + dLon;
 
	return {
		minLat: parseFloat(minLat.toFixed(6)),
		maxLat: parseFloat(maxLat.toFixed(6)),
		minLon: parseFloat(minLon.toFixed(6)),
		maxLon: parseFloat(maxLon.toFixed(6))
	};
}
 
/**
 * 封装的地理空间搜索范围计算函数
 * @param {Object} options - 参数对象
 * @param {number} options.latitude - 中心纬度
 * @param {number} options.longitude - 中心经度
 * @param {number} [options.distance=10] - 搜索距离（公里），默认为 10 公里
 * @returns {Object} 包含 minLat, maxLat, minLon, maxLon 的对象
 */
export function getSearchBounds({ latitude, longitude, distance = 100 }) {
	if (typeof latitude !== 'number' || typeof longitude !== 'number') {
		throw new Error('latitude 和 longitude 必须是数字');
	}
	if (typeof distance !== 'number' || distance < 0) {
		throw new Error('distance 必须是一个非负数');
	}
 
	return calculateBounds(latitude, longitude, distance);
}